correct error in computing time spans related to DST.
authortsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 20 Aug 2013 12:10:43 +0000 (12:10 +0000)
committertsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 20 Aug 2013 12:10:43 +0000 (12:10 +0000)
add toMSecsSinceEpoch() for Qt versions before 4.7.

gpsbabel/src/core/datetime.h
gpsbabel/waypt.cc

index c2d8fdb98155fe827f866e4fe3b15a5fff56036a..1673aa6c966a60df0b7b542a52affa65fd0ae5b4 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <time.h>
 
+#include <QtCore/qglobal.h>
 #include <QtCore/qdatetime.h>
 
 // As this code began in C, we have several hundred places that set and
@@ -79,12 +80,20 @@ public:
   // Qt 4.6 and under doesn't have msecsTo.  Fortunately, it's easy to
   // provide.  It's a 64-bit because if the times aren't on the same day,
   // the returned value can be quite large.
-  int64_t msecsTo(const QDateTime &dt) {
-    qint64 days = daysTo(dt);
-    qint64 msecs = time().msecsTo(dt.time());
+  qint64 msecsTo(const QDateTime &dt) const {
+    QDateTime dtutc = dt.toUTC();
+    QDateTime thisutc = toUTC();
+    qint64 days = thisutc.daysTo(dtutc);
+    qint64 msecs = thisutc.time().msecsTo(dtutc.time());
     return days * (1000 * 3600 * 24) + msecs;
   }
 
+  // Qt 4.6 and under doesn't have toMSecsSinceEpoch.
+  qint64 toMSecsSinceEpoch() const {
+    QDateTime epoch = QDateTime(QDate(1970, 1, 1), QTime(0, 0, 0, 0), Qt::UTC);
+    return -msecsTo(epoch);
+  }
+
   // Like toString, but with subsecond time that's included only when
   // the trailing digits aren't .000.  Always UTC.
   QString toPrettyString() const {
index 22f0e4f2653df3104a9dc8c362c97267fdaa7a09..70e7286610824558d84a3293b0bf3609ed036ab6 100644 (file)
@@ -546,7 +546,7 @@ waypt_time(const waypoint* wpt)
   if (!wpt->creation_time.isValid()) {
     return (double) 0;
   } else {
-    return (double)wpt->creation_time.toTime_t();
+    return ((double)wpt->creation_time.toMSecsSinceEpoch()) / 1000.0;
   }
 }
 
@@ -609,7 +609,7 @@ waypt_speed_ex(const waypoint* A, const waypoint* B)
     return 0;
   }
 
-  time = fabs(waypt_time(A) - waypt_time(B));
+  time = fabs(A->creation_time.msecsTo(B->creation_time)) / 1000.0;
   if (time > 0) {
     return (dist / time);
   } else {
@@ -632,7 +632,7 @@ waypt_speed(const waypoint* A, const waypoint* B)
     return 0;
   }
 
-  time = fabs(waypt_time(A) - waypt_time(B));
+  time = fabs(A->creation_time.msecsTo(B->creation_time)) / 1000.0;
   if (time > 0) {
     return (dist / time);
   } else {